/*
 * Constantes.java
 *
 * Created on 6 de noviembre de 2006, 04:09 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package com.src.computec.gestion.carguegestion.utilidades;

import com.src.computec.gestion.carguegestion.source.CargueGestionSource;
import com.src.computec.radar.base.source.CoreSource;
import com.src.computec.radar.base.util.RandomStringUtils;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

/**
 *
 * @author JL Perea
 */
public class ConstantesGenerales 
{
    protected static ConstantesGenerales instance;
    
    public static String SCHEMA;    
    public static String EXTENSION;    
    public static String SEPARADOR;  
    public static String SPLIT_PARAM;
    public static String DATE_FORMAT;
    public static String DATE_FORMAT2;
    
    public static String PATH_ARCHIVOS;
    public static String SESSION_PORTLET;      
    public static int NUM_MAX_THREADS;
    
    public static String ENTREGA_NORMAL_DB2;  
    public static String ENTREGA_BAJOPUERTA_DB2;  
    public static String DISTRIBUCION_DB2;  
    
    public static List GESTIONES_EN_PROCESO_DB2 = new ArrayList(); 
    public static List GESTIONES_DEVOLUCION_DB2 = new ArrayList(); 
    public static List GESTIONES_ESPECIALES_DB2 = new ArrayList(); 
    
    public static List GESTIONES_VALIDAS_REENVIO = new ArrayList(); 
    
    public static String FOLDER_CARGUE_ARCHIVOS;  
    public static String PATH_ARCHIVOS_ALERTAS;  
    
    public static String FILE_PREFIX   = "archivo_";//Este atributo debera terminar siempre en underscore
    public static String LISTA_SESSION = "ListaSessionFileUpload";
    public static String ERROR_SESSION = "ErrorArchivoSession";
    public static String LDAP_USER_SESSION = "LdapUserSession";
    public static String CODIGO_PROVEEDOR_SESSION = "CodigoProveedorSession";
    
    public static int ARCHIVOS_EN_PROCESO = 0;
    public static long CONTADOR = 0;
    
    public static long TOP_CONTADOR;
    public static Hashtable TABLA_ARCHIVOS = new Hashtable();
    public static RandomStringUtils RANDOM_STRING_UTILS = new RandomStringUtils();
    
    /// Para la insercion de Alertas
    public static String CODIGO_ES_ARCHIVO;
    public static String CODIGO_ACTIVO;
    public static String ORIGEN;
    public static String DESC_ERRORES;    
    
    public static String CODIGO_PROVEEDOR_COMPUTEC;
    
    public static int SLEEP_TIME = 0;

    public static String RECARGA_ENVIO = "RecargaEnvio";
    public static String RECARGA_DEVOLUCION = "RecargaDevolucion";
    
    
    // Para el manejo de Reenvios
    public static String CODIGO_INICIAL_REENVIO;
    public static String CODIGO_GESTION_REENVIO;
    
    public static String ORIGEN_REENVIO_INCONSISTENCIA;
    public static String ORIGEN_REENVIO_PROBABILIDAD; 
    public static int MIN_PROBABILIDAD_ENTREGA;   
    
    protected ConstantesGenerales() 
    {       
        CargueGestionSource cargueGestionSource = CargueGestionSource.getInstance();        
        
        this.SCHEMA       = cargueGestionSource.getCargueGestionSetupKey("schema");        
        this.EXTENSION    = cargueGestionSource.getCargueGestionSetupKey("extension"); 
        this.SEPARADOR    = cargueGestionSource.getCargueGestionSetupKey("separador"); 
        this.SPLIT_PARAM  = cargueGestionSource.getCargueGestionSetupKey("splitParam");
        this.DATE_FORMAT  = cargueGestionSource.getCargueGestionSetupKey("dateFormat");
        this.DATE_FORMAT2  = cargueGestionSource.getCargueGestionSetupKey("dateFormat2");
        
        this.PATH_ARCHIVOS   = cargueGestionSource.getCargueGestionSetupKey("pathArchivosCargados");     
        this.SESSION_PORTLET = cargueGestionSource.getCargueGestionSetupKey("sessionPortlet");  
        
        this.ENTREGA_BAJOPUERTA_DB2     = cargueGestionSource.getCargueGestionSetupKey("IdEntregaBajoPuertaDB2"); 
        this.ENTREGA_NORMAL_DB2         = cargueGestionSource.getCargueGestionSetupKey("IdEntregaNormalDB2"); 
        this.DISTRIBUCION_DB2           = cargueGestionSource.getCargueGestionSetupKey("IdDistribucionNormalDB2");   
        
        //Esto es para tener los ids de GESTIONES_EN_PROCESO en una lista
        String[] idsEnProceso = cargueGestionSource.getCargueGestionSetupKey("IdsGestionEnProceso").split(",");        
        for(int i = 0; i < idsEnProceso.length; i++)
        {
            this.GESTIONES_EN_PROCESO_DB2.add(idsEnProceso[i]);
        }
                
        //Esto es para tener los ids de RETENCION en una lista
        String[] idsEspeciales = cargueGestionSource.getCargueGestionSetupKey("IdsGestionEspeciales").split(",");        
        for(int i = 0; i < idsEspeciales.length; i++)
        {
            this.GESTIONES_ESPECIALES_DB2.add(idsEspeciales[i]);
        }
        
        //Esto es para tener los ids de DEVOLUCION en una lista
        String[] idsDevolucion = cargueGestionSource.getCargueGestionSetupKey("IdsGestionDevolucion").split(",");        
        for(int i = 0; i < idsDevolucion.length; i++)
        {
            this.GESTIONES_DEVOLUCION_DB2.add(idsDevolucion[i]);
        }
        
        //Esto es para tener los ids de las gestiones que pueden llegar a ser reenvio
        String[] idsGestionReenvios = cargueGestionSource.getCargueGestionSetupKey("IdsGestionReenvios").split(",");        
        for(int i = 0; i < idsGestionReenvios.length; i++)
        {
            this.GESTIONES_VALIDAS_REENVIO.add(idsGestionReenvios[i]);
        } 
        
        this.FOLDER_CARGUE_ARCHIVOS = CoreSource.getInstance().getUtilidadesSetupKey("folderCargueArchivos");
        this.PATH_ARCHIVOS_ALERTAS  = cargueGestionSource.getCargueGestionSetupKey("pathArchivosAlertas"); 
        
        //Para la insercion de alertas
        this.CODIGO_ES_ARCHIVO  = cargueGestionSource.getCargueGestionSetupKey("codigoEsArchivo");  
        this.CODIGO_ACTIVO      = cargueGestionSource.getCargueGestionSetupKey("codigoActivo");
        this.ORIGEN             = cargueGestionSource.getCargueGestionSetupKey("origen");
        this.DESC_ERRORES       = cargueGestionSource.getCargueGestionSetupKey("descripcionErrores");
        
        this.CODIGO_PROVEEDOR_COMPUTEC = cargueGestionSource.getCargueGestionSetupKey("codigoProveedorComputec"); 
                
        try
        {
            this.TOP_CONTADOR = Long.parseLong(cargueGestionSource.getCargueGestionSetupKey("topContador")); 
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
            this.TOP_CONTADOR = 500000;//Se coloca un valor cualquiera
        }
        
        try
        {
            this.NUM_MAX_THREADS = Integer.parseInt(cargueGestionSource.getCargueGestionSetupKey("numMaxThreads"));   
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
            this.NUM_MAX_THREADS = 2;//Se coloca un valor cualquiera
        }
        
        try
        {
            this.SLEEP_TIME = Integer.parseInt(cargueGestionSource.getCargueGestionSetupKey("SLEEP_TIME"));   
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
            this.SLEEP_TIME = 3000;//Se coloca un valor cualquiera
        }        
        
        ///////////////////////////////////////
        // Para los reenvios
        this.CODIGO_INICIAL_REENVIO = cargueGestionSource.getCargueGestionSetupKey("codigoInicialReenvio");  
        this.CODIGO_GESTION_REENVIO = cargueGestionSource.getCargueGestionSetupKey("codigoGestionReenvio");  
        
        this.ORIGEN_REENVIO_INCONSISTENCIA = cargueGestionSource.getCargueGestionSetupKey("OrigenInconsistencia");  
        this.ORIGEN_REENVIO_PROBABILIDAD = cargueGestionSource.getCargueGestionSetupKey("OrigenProbabilidadEntrega");  
        
        try
        {
            this.MIN_PROBABILIDAD_ENTREGA = Integer.parseInt(cargueGestionSource.getCargueGestionSetupKey("minProbabilidadEntrega"));   
        }
        catch(NumberFormatException e)
        {
            e.printStackTrace();
            this.MIN_PROBABILIDAD_ENTREGA = 80;//Se coloca un valor cualquiera
        }               
    }
    
    public static ConstantesGenerales getInstance() 
    {
        if (instance == null) 
        {
            instance = new ConstantesGenerales();
        }
        return instance;
    }

}
